//package com.gxcc3.ygps.common.utils.poi;
//
//import com.gxcc3.ygps.common.core.domain.ExcelColumn;
//import com.gxcc3.ygps.common.core.domain.ExcelColumnSelect;
//import org.apache.poi.hssf.usermodel.HSSFCellStyle;
//import org.apache.poi.hssf.usermodel.HSSFDataFormat;
//import org.apache.poi.hssf.usermodel.HSSFDataValidation;
//import org.apache.poi.hssf.usermodel.HSSFRow;
//import org.apache.poi.ss.usermodel.*;
//import org.apache.poi.util.IOUtils;
//import org.apache.poi.xssf.streaming.SXSSFWorkbook;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import javax.servlet.http.HttpServletResponse;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//public class ExcelUtils {
//
//
//    private static final Logger log = LoggerFactory.getLogger(ExcelUtils.class);
//
//
//    /**
//     * 工作薄对象
//     */
//    private Workbook wb;
//
//    /**
//     * 工作表对象
//     */
//    private Sheet sheet;
//
//    /**
//     * 标题行
//     */
//    private List<ExcelColumn> columnList;
//
//    /**
//     * 导出文件名
//     */
//    private String excelName;
//
//    /**
//     * 导出sheetName名，默认sheet1
//     */
//    private String sheetName = "sheet1";
//
//
//    /**
//     * 样式列表
//     */
//    private Map<String, CellStyle> styles;
//
//
//    public void exportExcel(HttpServletResponse response, List<ExcelColumn> columnList, String excelName) {
//        exportExcel(response,columnList,null,excelName);
//    }
//
//    private void exportExcel(HttpServletResponse response, List<ExcelColumn> columnList, List<?> dataList, String excelName) {
//        createWorkbook();
//        CellStyle cellStyle = wb.createCellStyle();
//        DataFormat dataFormat = wb.createDataFormat();
//        Row row = sheet.createRow(0);
//        row.setHeightInPoints(30);
//
//
//        // 失败原因样式
//        Font font = wb.createFont();
//        font.setColor(Font.COLOR_RED);
//        CellStyle cellStyle_msg = wb.createCellStyle();
//        cellStyle_msg.setFont(font);
//
//
//        Cell cell = null;
//        HSSFCellStyle hssfCellStyle = null;
//        for (int i = 0; i < columnList.size(); i++) {
//            ExcelColumn column = columnList.get(i);
//            String columnName = column.getColumnName();
//            boolean required = column.isRequired();
//            ExcelColumn.ColumnType columnType = column.getColumnType();
//            List<ExcelColumnSelect> columnSelect = column.getColumnSelect();
//            // 设置表宽
//            sheet.setColumnWidth(i, (int) ((40 + 0.72) * 256)); // 在EXCEL文档中实际列宽为25
//            // 设置表样式
//            if (columnType != ExcelColumn.ColumnType.DATE) {
//                sheet.setDefaultColumnStyle(i, cellStyle);
//            }
//            cell = row.createCell(i);
//            cell.setCellValue(columnName);
//            hssfCellStyle = getHSSFCellStyle(wb, required);
//            cell.setCellStyle(hssfCellStyle);
//            if (columnType == ExportExcelColumns.ColumnType.DATE) {
//                // 取得规则
//                DataValidation validate = setDate(sheet, i, i);
//                // 设定规则
//                sheet.addValidationData(validate);
//            }
//            if (columnType == ExportExcelColumns.ColumnType.SELECT && selectdata != null
//                    && !selectdata.isEmpty()) {
//                // 取得规则
//                HSSFDataValidation validate = null;
//                StringBuilder sbBuilder = new StringBuilder();
//                for (String str : selectdata) {
//                    sbBuilder.append(str);
//                }
//                if (sbBuilder.length() >= MAX_SELECT_LENGTH) {
//                    validate = getDataValidationList4Col(sheet, i, i,
//                            selectdata, wb);
//                } else {
//                    validate = setBoxs(i, i, selectdata);
//                }
//                // 设定规则
//                sheet.addValidationData(validate);
//            }
//
//       }
//    }
//
//
//    public void exportExcel(HttpServletResponse response){
//        try
//        {
//            this.sheet = wb.createSheet();
//            //目前只有一个sheet
//            wb.setSheetName(1,sheetName);
//            Row row = sheet.createRow(1);
//
//            wb.write(response.getOutputStream());
//        }
//        catch (Exception e)
//        {
//            log.error("导出Excel异常{}", e.getMessage());
//        }
//        finally
//        {
//            IOUtils.closeQuietly(wb);
//        }
//    }
//
//    private void init(List<ExcelColumn> columnList, String excelName) {
//        this.columnList = columnList;
//        this.excelName = excelName;
////        createExcelField();
//        createWorkbook();
//        createTitle();
//        createSubHead();
//    }
//
//    /**
//     * 创建一个工作簿
//     */
//    public void createWorkbook()
//    {
//        this.wb = new SXSSFWorkbook(500);
//        this.sheet = wb.createSheet();
//        wb.setSheetName(0, sheetName);
//    }
//
//
//    /**
//     * 创建表格样式
//     *
//     * @param wb 工作薄对象
//     * @return 样式列表
//     */
//    private Map<String, CellStyle> createStyles(Workbook wb)
//    {
//        // 写入各条记录,每条记录对应excel表中的一行
//        Map<String, CellStyle> styles = new HashMap<String, CellStyle>();
//        CellStyle style = wb.createCellStyle();
//        style.setAlignment(HorizontalAlignment.CENTER);
//        style.setVerticalAlignment(VerticalAlignment.CENTER);
//        Font titleFont = wb.createFont();
//        titleFont.setFontName("Arial");
//        titleFont.setFontHeightInPoints((short) 16);
//        titleFont.setBold(true);
//        style.setFont(titleFont);
//        DataFormat dataFormat = wb.createDataFormat();
//        style.setDataFormat(dataFormat.getFormat("@"));
//        styles.put("title", style);
//
//        style = wb.createCellStyle();
//        style.setAlignment(HorizontalAlignment.CENTER);
//        style.setVerticalAlignment(VerticalAlignment.CENTER);
//        style.setBorderRight(BorderStyle.THIN);
//        style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
//        style.setBorderLeft(BorderStyle.THIN);
//        style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
//        style.setBorderTop(BorderStyle.THIN);
//        style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
//        style.setBorderBottom(BorderStyle.THIN);
//        style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
//        Font dataFont = wb.createFont();
//        dataFont.setFontName("Arial");
//        dataFont.setFontHeightInPoints((short) 10);
//        style.setFont(dataFont);
//        styles.put("data", style);
//
//        style = wb.createCellStyle();
//        style.setAlignment(HorizontalAlignment.CENTER);
//        style.setVerticalAlignment(VerticalAlignment.CENTER);
//        style.setDataFormat(dataFormat.getFormat("######0.00"));
//        Font totalFont = wb.createFont();
//        totalFont.setFontName("Arial");
//        totalFont.setFontHeightInPoints((short) 10);
//        style.setFont(totalFont);
//        styles.put("total", style);
//
//        styles.putAll(annotationHeaderStyles(wb, styles));
//
//        styles.putAll(annotationDataStyles(wb));
//
//        return styles;
//    }
//}
